#!/usr/bin/env python3
"""
侦探推理游戏 - 构建脚本
只包含必要的依赖，避免引入不需要的库
"""

import os
import sys
import subprocess
import shutil
from pathlib import Path

def check_pyinstaller():
    """检查PyInstaller是否已安装"""
    try:
        import PyInstaller
        print(f"✅ PyInstaller已安装: {PyInstaller.__version__}")
        return True
    except ImportError:
        print("❌ PyInstaller未安装")
        return False

def install_pyinstaller():
    """安装PyInstaller"""
    print("📦 正在安装PyInstaller...")
    try:
        subprocess.run([sys.executable, "-m", "pip", "install", "pyinstaller"], check=True)
        print("✅ PyInstaller安装成功")
        return True
    except subprocess.CalledProcessError:
        print("❌ PyInstaller安装失败")
        return False

def clean_build():
    """清理构建文件"""
    print("🧹 清理构建文件...")
    
    dirs_to_clean = ['build', 'dist', '__pycache__']
    for dir_name in dirs_to_clean:
        if os.path.exists(dir_name):
            shutil.rmtree(dir_name)
            print(f"  删除目录: {dir_name}")

def create_env_template():
    """创建env.template模板文件"""
    if os.path.exists('env.template'):
        print("✅ env.template 模板文件已存在")
        return
        
    env_template = """# 侦探推理游戏配置文件
# 请填入你的API配置信息

# OpenAI API配置
OPENAI_API_KEY=your_openai_api_key_here
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-3.5-turbo

# 或者使用其他兼容的API服务
# OPENAI_BASE_URL=https://your-api-service.com/v1
# OPENAI_MODEL=your-model-name

# 游戏设置
DEBUG=false
GAME_LANGUAGE=chinese

# AI参数设置
NARRATOR_TEMPERATURE=0.8
CHARACTER_TEMPERATURE=0.9
MAX_CONVERSATION_HISTORY=10
"""
    
    with open('env.template', 'w', encoding='utf-8') as f:
        f.write(env_template)
    
    print("✅ 已创建 env.template 模板文件")

def build_executable():
    """构建可执行文件"""
    print("🔨 开始构建可执行文件...")
    
    # 检查必要文件
    required_files = ['start_detective.py', 'README_TURTLE_SOUP.md', 'requirements.txt', 'env.template']
    for file in required_files:
        if not os.path.exists(file):
            print(f"❌ 缺少文件: {file}")
            return False
        print(f"✅ 找到文件: {file}")
    
    try:
        # 最简化的PyInstaller命令
        cmd = [
            sys.executable, "-m", "PyInstaller",
            "--onefile",
            "--console", 
            "--name", "侦探推理游戏",
            # 只添加必要的数据文件
            "--add-data", "README_TURTLE_SOUP.md;.",
            "--add-data", "env.template;.",
            # 只包含核心依赖
            "--hidden-import", "openai",
            "--hidden-import", "rich",
            "--hidden-import", "pydantic", 
            "--hidden-import", "dotenv",
            "--hidden-import", "colorama",
            # 排除大型库
            "--exclude-module", "numpy",
            "--exclude-module", "pandas", 
            "--exclude-module", "matplotlib",
            "--exclude-module", "scipy",
            "--exclude-module", "torch",
            "--exclude-module", "tensorflow",
            "--exclude-module", "PIL",
            "--exclude-module", "cv2",
            "--exclude-module", "tkinter",
            "start_detective.py"
        ]
        
        print("执行命令:")
        print(" ".join(cmd))
        print()
        
        result = subprocess.run(cmd, check=True)
        print("✅ 构建成功！")
        
        return True
        
    except subprocess.CalledProcessError as e:
        print(f"❌ 构建失败: {e}")
        return False
    except KeyboardInterrupt:
        print("❌ 构建被中断")
        return False

def create_readme():
    """创建发布说明文件"""
    readme_content = """# 侦探推理游戏 - 可执行版本

## 使用说明

1. **配置API密钥**
   - 复制 env.template 文件并重命名为 .env
   - 在 .env 文件中填入你的OpenAI API密钥
   - 如果使用其他兼容的API服务，请修改 OPENAI_BASE_URL

2. **运行游戏**
   - Windows: 双击 侦探推理游戏.exe
   - 或在命令行中运行: ./侦探推理游戏.exe

3. **游戏特色**
   - 🕵️ AI驱动的智能NPC对话
   - 🔍 动态证据揭露系统
   - 🗳️ 多角色投票机制
   - 📝 完整的推理链条

## 系统要求

- Windows 10/11 (64位)
- 网络连接 (用于AI API调用)
- 有效的OpenAI API密钥或兼容服务

## 故障排除

1. **API密钥错误**
   - 检查 .env 文件中的API密钥是否正确
   - 确认API服务可用

2. **网络连接问题**
   - 检查网络连接
   - 确认防火墙设置

3. **其他问题**
   - 查看控制台输出的错误信息
   - 确保所有依赖文件完整

祝你游戏愉快！🎮
"""
    
    with open('dist/README.txt', 'w', encoding='utf-8') as f:
        f.write(readme_content)
    
    print("✅ 已创建发布说明文件")

def copy_config_files():
    """复制配置文件到发布目录"""
    if os.path.exists('dist'):
        # 复制模板文件
        if os.path.exists('env.template'):
            shutil.copy('env.template', 'dist/')
            print("✅ 已复制配置文件")
        
        # 如果存在.env文件，也复制过去（但要提醒用户检查）
        if os.path.exists('.env'):
            shutil.copy('.env', 'dist/')
            print("⚠️  已复制 .env 到发布目录，请检查API密钥是否正确")

def main():
    print("🎮 侦探推理游戏 - 构建脚本")
    print("=" * 50)
    
    # 检查PyInstaller
    if not check_pyinstaller():
        if not install_pyinstaller():
            print("❌ 无法安装PyInstaller，请手动安装")
            return
    
    # 创建配置模板
    create_env_template()
    
    # 清理构建文件
    clean_build()
    
    if build_executable():
        # 创建说明文件和复制配置
        create_readme()
        copy_config_files()
        
        print("\n🎉 打包完成！")
        print("📁 文件位置: dist/侦探推理游戏.exe")
        print("📖 使用说明: dist/README.txt")
        print("\n使用说明:")
        print("1. 复制 env.template 为 .env")
        print("2. 在 .env 中配置API密钥")
        print("3. 运行 侦探推理游戏.exe")
        print("\n⚠️  发布前请确保:")
        print("   1. 测试可执行文件是否正常运行")
        print("   2. 检查API密钥配置")
        print("   3. 验证所有功能正常")
    else:
        print("\n❌ 打包失败")

if __name__ == "__main__":
    main() 